<?php
namespace common\modules\content\widgets;

use common\modules\content\models\WidgetCarousel;
use common\modules\content\models\WidgetCarouselItem;
use Yii;
use yii\base\InvalidConfigException;
use yii\bootstrap\Carousel;
use yii\helpers\Html;

/**
 * Class DbCarousel
 *
 * @package common\modules\content\widgets
 */
class DbCarousel extends Carousel
{

    /**
     *
     * @var
     *
     */
    public $key;

    /**
     *
     * @var array
     */
    public $controls = [
        '<span class="glyphicon glyphicon-chevron-left"></span>',
        '<span class="glyphicon glyphicon-chevron-right"></span>'
    ];

    /**
     *
     * @throws InvalidConfigException
     */
    public function init()
    {
        if (! $this->key) {
            throw new InvalidConfigException();
        }
        $cacheKey = [
            WidgetCarousel::className(),
            $this->key
        ];
        $items = Yii::$app->cache->get($cacheKey);
        if ($items === false) {
            $items = [];
            $query = WidgetCarouselItem::find()->joinWith('carousel')
                ->where([
                '{{%widget_carousel_item}}.status' => 1,
                '{{%widget_carousel}}.status' => WidgetCarousel::STATUS_ACTIVE,
                '{{%widget_carousel}}.key' => $this->key
            ])
                ->orderBy([
                'order' => SORT_ASC
            ]);
            foreach ($query->all() as $k => $item) {
                /**
                 *
                 * @var $item \common\models\WidgetCarouselItem
                 */
                if ($item->path) {
                    $items[$k]['content'] = Html::img($item->getImageUrl());
                }
                
                if ($item->url) {
                    $items[$k]['content'] = Html::a($items[$k]['content'], $item->url, [
                        'target' => '_blank'
                    ]);
                }
                
                if ($item->caption) {
                    $items[$k]['caption'] = $item->caption;
                }
            }
            Yii::$app->cache->set($cacheKey, $items, 60 * 60 * 24 * 365);
        }
        $this->items = $items;
        parent::init();
    }
}
